package Logik;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.io.Serializable;
import java.text.SimpleDateFormat;

/**
 *Beinhaltet Konstruktor für Medien und die zugehörigen get-Methoden. Zusätzlich eine setAusgeliehen-Methode.
 *@author Tobias Graspointner, Dominik Sewcz
 */
public class Kunde implements Serializable {

    SimpleDateFormat sdf = new SimpleDateFormat("dd.MM.yyyy");
    static final long serialVersionUID = 123456789;
    private int kundennr;
    private String name;
    private Date geburtsdatum;
    private double saldo;
    private List<Medium> geliehenListe;
    private String grund;
    private Date sperrDatum;
    private boolean sperrStatus;

    public Kunde(int knr, String name, Date gbdatum) {
        this.kundennr = knr;
        this.name = name;
        this.geburtsdatum = gbdatum;
        this.sperrStatus = false;
        this.saldo = 0;
        this.grund = null;
        this.sperrDatum = null;
        this.geliehenListe = new ArrayList<Medium>();
    }

    public int getkundennr() {
        return this.kundennr;
    }

    public String getName() {
        return this.name;
    }

    public Date getGeburtsdatum() {
        return this.geburtsdatum;
    }

    public double getSaldo() {
        return this.saldo;
    }

    public List<Medium> getgehliehenListe() {
        return this.geliehenListe;
    }

    public String getgrund() {
        return this.grund;
    }

    public Date getsperrDatum() {
        return this.sperrDatum;
    }

    public boolean getsperrStatus() {
        return this.sperrStatus;
    }

    public void setname(String neuerName) {
        this.name = neuerName;
    }

    public void setgeburtsdatum(Date neuesGeburtsdatum) {
        this.geburtsdatum = neuesGeburtsdatum;
    }

    public void setsaldo(double neuerSaldo) {
        this.saldo = neuerSaldo;
    }

    public void mediumHinzufügen(Medium mediumAusleihen) {
        this.geliehenListe.add(mediumAusleihen);
    }

    public void mediumLöschen(Medium mediumRückgabe) {
        this.geliehenListe.remove(mediumRückgabe);
    }

    public void sperreKunde(Date sperrdatum, String sperrmessage) {
        this.sperrDatum = sperrdatum;
        this.grund = sperrmessage;
        this.sperrStatus = true;
    }

    public void entsperrenKunde() {
        this.sperrDatum = null;
        this.grund = null;
        this.sperrStatus = false;
    }

    @Override
    public String toString() {
        return " " + this.kundennr + "| Name: " + this.getName() + "  | Geb.Datum: " + sdf.format(this.geburtsdatum);
    }
}
